@echo off

setlocal

rem protoc.exe路径
set PROTOC_PATH=.\c
rem grpc plugin路径
set GRPC_PATH=.\c
rem protoc.exe的名字
set PROTOC=protoc

rem 修改PATH环境变量
set PATH=%PATH%;%PROTOC_PATH%;%GRPC_PATH%

rem 输出protoc版本新
%PROTOC% --version

rem 各语言的grpc plugin绝对路径
set GRPC_CPP_PLUGIN=%GRPC_PATH%\grpc_cpp_plugin.exe
set GRPC_CSHARP_PLUGIN=%GRPC_PATH%\grpc_csharp_plugin.exe
set GRPC_PYTHON_PLUGIN=%GRPC_PATH%\grpc_python_plugin.exe

rem 生成文件的路径
set CPP_OUT=.\gen\cpp
set CSHARP_OUT=.\gen\csharp
set PYTHON_OUT=.\gen\python

rem 删除原有的文件, 建立新文件夹
rd /S /Q %CPP_OUT%
md %CPP_OUT%
rd /S /Q %CSHARP_OUT%
md %CSHARP_OUT%
rd /S /Q %PYTHON_OUT%
md %PYTHON_OUT%

set PROTO_PATH=./protos
rem 使用完整路径
set PROTO_FILES=%PROTO_PATH%/*.proto

rem 生成C++代码
rem 生成序列化代码
%PROTOC% --proto_path=%PROTO_PATH% --cpp_out=%CPP_OUT% %PROTO_FILES%
rem (1) 生成C++服务端框架代码(根据需要决定是否生成,如果不需要,注释掉该行代码即可!)
%PROTOC% --proto_path=%PROTO_PATH% --grpc_out=%CPP_OUT% --plugin=protoc-gen-grpc=%GRPC_CPP_PLUGIN% %PROTO_FILES%

rem 生成C#代码
rem 生成序列化代码
%PROTOC% --proto_path=%PROTO_PATH% --csharp_out=%CSHARP_OUT% %PROTO_FILES%
rem (2) 生成Crem服务端框架代码(根据需要决定是否生成,如果不需要,注释掉该行代码即可!)
%PROTOC% --proto_path=%PROTO_PATH% --grpc_out=%CSHARP_OUT% --plugin=protoc-gen-grpc=%GRPC_CSHARP_PLUGIN% %PROTO_FILES%

rem 生成python代码
rem 生成序列化代码
%PROTOC% --proto_path=%PROTO_PATH% --python_out=%PYTHON_OUT% %PROTO_FILES%
rem (3) 生成python服务端框架代码(根据需要决定是否生成,如果不需要,注释掉该行代码即可!)
%PROTOC% --proto_path=%PROTO_PATH% --grpc_out=%PYTHON_OUT% --plugin=protoc-gen-grpc=%GRPC_PYTHON_PLUGIN% %PROTO_FILES%

endlocal
pause
